package com.univteam.tetris.engine.block;

import com.univteam.tetris.engine.data.HistoryData;
import com.univteam.tetris.engine.point.Point;

/**
 * 俄罗斯方块游戏中的方块接口
 * 定义了方块的基本行为，包括移动、旋转、历史记录等操作
 * 所有具体的方块类型都需要实现这个接口
 *
 * @Author fyp
 * @Description 俄罗斯方块游戏：方块接口
 * @Date Created at 2018/3/5 14:33
 * @Project com.univteam.tetris
 */
public interface Block {
    /**
     * 将方块顺时针旋转90度
     * 旋转时需要考虑边界检查和碰撞检测
     */
    void rotate();

    /**
     * 回退到上一个状态
     * 用于实现撤销操作，恢复方块的位置和形状
     */
    void prev();

    /**
     * 前进到下一个状态
     * 用于实现重做操作，恢复被撤销的操作
     */
    void next();

    /**
     * 停止方块的移动
     * 当方块到达底部或者碰到其他方块时调用
     */
    void stop();

    /**
     * 方块向左移动一个单位
     * 移动前需要进行边界检查和碰撞检测
     */
    void left();

    /**
     * 方块向右移动一个单位
     * 移动前需要进行边界检查和碰撞检测
     */
    void right();

    /**
     * 方块快速下落
     * 实现快速下落功能，直到碰到底部或其他方块
     */
    void down();

    /**
     * 获取方块当前占据的所有坐标点
     * @return 返回表示方块位置的坐标点数组
     */
    Point[] getPoints();

    /**
     * 获取方块的历史记录数据
     * 用于实现撤销/重做功能
     * @return 返回方块的历史记录数据
     */
    HistoryData getHistory();
}
